﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InnvoiceActual.Logica.GestorObject.Factura;
using InnvoiceActual.Logica.GestorObject;
using InnvoiceActual.BaseDeDatos.innvoicedbDataSetTableAdapters;
using System.Data;
using MySql.Data.MySqlClient;
using System.Windows;


namespace InnvoiceActual.Logica.GestorDB.FacturaDB
{
    public class CabeceraFacturaDB
    {
        //cabecera_factura.codigo_empresa, cabecera_factura.nro_comprobante1, cabecera_factura.nro_comprobante2, 
        //cabecera_factura.codigoTipo, 
        //cabecera_factura.nro2_remito, cliente.razon_social, cliente.resp_legal, condiciondepago.descripcion AS forma_de_pago, 
        //tipocontribuyente.descripcion AS tipo_contribuyente

        // Filtra la cebecera de la factura
        public CabeceraFactura filtrarCabecera(int mEmpresa, short comp1, int comp2, int tipoFact)
        {

            CabeceraFactura miCabecera = new CabeceraFactura();
            cabecera_facturaTableAdapter dbCabecera = new cabecera_facturaTableAdapter();
            DataTable tablaCabecera = new DataTable();

            dbCabecera.Connection.Open();
            MySqlTransaction mitransaccion = dbCabecera.Connection.BeginTransaction();
            

            try
            {
                tablaCabecera = dbCabecera.GetDataCabeceraFactura(mEmpresa,comp1,comp2,tipoFact);


                foreach (DataRow items in tablaCabecera.Rows)
                {                    
                    CabeceraFactura dataCabecera = new CabeceraFactura();


//public byte Codigo_empresa { set; get; } //	tinyint(2)		
//public int Nro_comprobante1 { set; get; } //smallint(4)		
//public int Nro_comprobante2 { set; get; }	//int(8)		
//public byte CodigoTipo { set; get; } //	tinyint(3)		
//public string descripCodigoTipo { set; get;  }
//public int Nro_cliente { set; get; }	
//public int DescripNrocliente { set; get; }
//public int TipoContrib { set; get; }	// tinyint(2)		
//public string DescripTipoContrib { set; get; }	// tinyint(2)		
//public byte Forma_pago { set; get; }   //	tinyint(2)	
//public string DescripForma_pago { set; get; }   //	tinyint(2)	
//public int Nro2_remito { set; get; }	// int(8)

//cabecera_factura.codigo_empresa, cabecera_factura.nro_comprobante1, cabecera_factura.nro_comprobante2, 
//cabecera_factura.codigoTipo, 
//     cabecera_factura.nro2_remito, cliente.razon_social, cliente.resp_legal, condiciondepago.descripcion AS forma_de_pago, 
//     tipocontribuyente.descripcion AS tipo_contribuyente, cabecera_factura.nro_cliente, cabecera_factura.tipoContrib, 
//cabecera_factura.forma_pago, 
//     config_factura.tipo AS tipo_factura, config_factura.descripcion AS descrip_codigo_fact

                    // ----------------------------- Critical Zone

                    //dataCabecera.Codigo_empresa = Convert.ToByte(items["codigo_empresa"]);
                    //dataCabecera.Nro_comprobante1 = Convert.ToInt16(items["nro_comprobante1"]);
                    //dataCabecera.Nro_comprobante2 = Convert.ToInt32(items["nro_comprobante2"]);
                    //dataCabecera.CodigoTipo = Convert.ToByte(items["codigoTipo"]);
                    //dataCabecera.descripCodigoTipo = items["descrip_codigo_fact"].ToString();
                    dataCabecera.Nro_cliente = Convert.ToInt32(items["nro_cliente"]);
                    //dataCabecera.DescripNrocliente = items["razon_social"].ToString();
                    dataCabecera.TipoContrib = Convert.ToByte(items["tipoContrib"]);
                    dataCabecera.DescripTipoContrib = items["tipo_contribuyente"].ToString();
                    dataCabecera.Forma_pago = Convert.ToByte(items["forma_pago"]);
                    dataCabecera.DescripForma_pago = items["forma_de_pago"].ToString();
                    dataCabecera.Nro2_remito = Convert.ToInt32(items["nro2_remito"]);

                    // ----------------------------- Critical Zone
                }
            }
            catch (Exception mException)
            {
                MessageBox.Show("Error: Classs CabeceraFacturaDB - metodo: filtrarCabecera :: " + mException.Message, "Cuidado", MessageBoxButton.OK);
                mitransaccion.Rollback();
            }
            finally
            {
                mitransaccion.Connection.Close();
            }

            return miCabecera;
        }



        // Da de alta una nueva cabecera -------------------------------

        public void DarDeAltaCabecera(CabeceraFactura miCabecera)
        {
            int iResult;
            cabecera_facturaTableAdapter tablaCabecera = new cabecera_facturaTableAdapter();
            DataTable miTablaCabecera = new DataTable();
            EmpresaCS auxEmpresa = EmpresaCS.Instance;
            Facturero _factura = new Facturero();

            tablaCabecera.Connection.Open();
            MySqlTransaction mitransaccion = tablaCabecera.Connection.BeginTransaction();
                
            try
            {

                iResult = tablaCabecera.InsertCabeceraFactura(auxEmpresa.CodigoEmpresa, _factura.Comprobante1,
                                                              _factura.Comprobante2, miCabecera.TipoContrib,
                                                              miCabecera.Nro_cliente, miCabecera.TipoContrib,
                                                              miCabecera.Forma_pago, miCabecera.Nro2_remito);

                mitransaccion.Commit();

                if (iResult == 1)
                {
                    MessageBox.Show("Operacion de inserción exitosa", "Información", MessageBoxButton.OK);
                }
            }
            catch (Exception e)
            {
                mitransaccion.Rollback();
                MessageBox.Show("Class::CabeceraFacturaDB::DarDeAltaCabecera:: Error:: " + e.Message, "Error",
                                MessageBoxButton.OK);
            }
            finally
            {
                mitransaccion.Connection.Close();
            }
        }

    }
}
